package cn.jwtool.jwcache.buffer;

import cn.jwtool.jwcache.buffer.config.JwcatchConfig;
import cn.jwtool.jwcache.buffer.listener.Event;
import cn.jwtool.jwcache.buffer.listener.EventListener;
import cn.jwtool.jwcache.thread.TaskManager;

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

/**
 * @author : willian fu
 * @version : 1.0
 */
public class Publisher {

    private Publisher(){}

    //事件监听器
    private static Set<EventListener> eventListeners = Collections.synchronizedSet(new HashSet<>());

    /**
     * 发布事件，异步执行
     * @param event 事件类型
     * @param param 参数
     */
    public static void publish(Event event, Object... param) {
        if (JwcatchConfig.getListener()){
            TaskManager.executor(() -> eventListeners.forEach(ls -> ls.eventHandler(event, param)));
        }
    }

    /**
     * 移除事件
     * @param listener 监听器
     */
    public static void removeReg(EventListener listener){
        eventListeners.remove(listener);
    }

    /**
     * 注册事件
     * @param listener 监听器
     */
    public static void regListener(EventListener listener){
        eventListeners.add(listener);
    }
}
